WPF datagrid选择行单击事件? 您所在的位置:网站首页 wpf datagrid 选中行没有颜色 WPF datagrid选择行单击事件?

WPF datagrid选择行单击事件?

2023-10-30 04:40| 来源: 网络整理| 查看: 265

当双击WPF DataGrid的选定行时,我想执行一些代码。 我知道datagrid有一个MouseDoubleClicked事件,并且它也有一个行选择的事件,但是我看不到"选择的行被双击"的任何事件...

您认为有可能以某种方式捕获此事件吗?

相关讨论 如果您使用Caliburn.Micro和MVVM方法,则有一种更好的方法来完成此操作-双击后获取行信息。

您可以在ItemContainerStyle中添加事件处理程序(这是应用于行的样式):

12345678                                         ...

然后,在处理程序中,您可以检查是否选择了该行

1234private void Row_DoubleClick(object sender, MouseButtonEventArgs e) {     // execute some code } 相关讨论 FWIW,我无法让RoutedEvent工作。 我收到错误消息:"在EventSetter类型中找不到属性RoutedEvent。" 我可以通过将RoutedEvent更改为Event来使其工作。 @CoreyCole,您说对了,这是一个错误。 感谢您指出。 我发现将其放在``中,而ItemContainerStyle没有。 @ThomasLeveseque行或单元格是否有任何单击事件? @VK您可以使用Event="MouseUp"或Event="MouseDown"

在寻找解决方案时,我遇到了这个问题,无论是由于年龄还是我自己的实现,答案都没有用。无论哪种方式,这都是对我有用的解决方案。

将MouseDoubleClick事件添加到DataGrid

1234567       

并在方法中

123456789private void Row_MouseDoubleClick(object sender, MouseButtonEventArgs e)                 {                                     // Ensure row was clicked and not empty space                     DataGridRow row = ItemsControl.ContainerFromElement((DataGrid)sender, e.OriginalSource as DependencyObject) as DataGridRow;                     if ( row == null ) return;                     ...                     Stuff();                 }

到目前为止,我还没有发现任何问题。它没有其他人遇到的问题,那就是双击标题或空白区域并预先选择了一行仍会导致它运行。

相关讨论 您可能要在返回之前先执行e.handled = True;

您可以尝试使用当前单元格更改事件处理程序,该处理程序只能通过单击操作,如果您要查找的内容则不能双击,因为双击可用于启动单元格或整个行的编辑或任何其他过程:

1234567private void datagrid_CurrentCellChanged(object sender, EventArgs e)     {         int selected_index = datagrid.SelectedIndex + 1;         // this is used for debugging and testing.         //MessageBox.Show("The index of the row for the clicked cell is" + selected_index);     } 相关讨论 您可能应该改用SelectionChanged事件。 所选索引似乎在此事件方面落后。

ItemContainerStyle没有最佳解决方案,建议使用RowStyle:

在您的XAML中:

12345                        

在您的代码中:

1234private void DataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e) {     //your logic here }

为什么在DoubleClick事件发生时不获取SelectedRow属性并对它执行某些操作?如果SelectedRow为null,则表示未选择行,因此只需返回

1234567private void Grid_DoubleClick(object sender, RoutedEventArgs e) {     if(grid.SelectedRow == null)         return; // return if there's no row selected     // do something with the Selected row here } 相关讨论 这行不通。 用户可以先选择该行,然后在空白区域中双击。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有